package com.dcy.singleton.type7;

/**
 * @Author：dcy
 * @Description:
 * @Date: 2021/1/19 14:56
 */
public class SingletonTest07 {
    public static void main(String[] args) {
        // 测试
        System.out.println("静态内部类");
        Singleton instance = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();
        System.out.println(instance == instance2);
        System.out.println(instance.hashCode());
        System.out.println(instance2.hashCode());
    }
}


/**
 * 静态内部类
 * 推荐使用
 */
class Singleton {

    // 构造器你私有化
    private Singleton() {
    }

    /**
     * 写一个静态内部类，该类中有个静态属性Singleton
     * 静态内部类的好处：
     * 1、Singleton 初始化的时候，SingletonInstance 不会被加载，达到了懒加载的效果
     * 2、SingletonInstance 静态内部类是线程安全的，JVM装载类的时候是线程安全的
     */
    private static class SingletonInstance {
        private static final Singleton INSTANCE = new Singleton();
    }

    // 提供一个静态的公有方法，直接返回SingletonInstance.INSTANCE
    public static Singleton getInstance() {
        return SingletonInstance.INSTANCE;
    }
}
